/*
  可以通过数据类型的替代参数编写类或方法的规范。当编译器遇到类的构造函数或方法的函数调用时，它会生成代码来处理指定的数据类型
*/

using System;
using System.Collections.Generic;

namespace GenericApplication
{
  public class MyGenericArray<T>
  {
    private T[] array;
    public MyGenericArray(int size)
    {
      array = new T[size + 1];
    }
    public T getItem(int index)
    {
      return array[index];
    }
    public void setItem(int index, T value)
    {
      array[index] = value;
    }
  }

  class Tester
  {
    static void Main(string[] args)
    {
      // 声明一个整型数组
      MyGenericArray<int> intArray = new MyGenericArray<int>(5);
      // 设置值
      for (int c = 0; c < 5; c++)
      {
        intArray.setItem(c, c * 5);
      }
      // 获取值
      for (int c = 0; c < 5; c++)
      {
        Console.Write(intArray.getItem(c) + " ");
      }
      Console.WriteLine();
      // 声明一个字符数组
      MyGenericArray<char> charArray = new MyGenericArray<char>(5);
      // 设置值
      for (int c = 0; c < 5; c++)
      {
        charArray.setItem(c, (char)(c + 97));
      }
      // 获取值
      for (int c = 0; c < 5; c++)
      {
        Console.Write(charArray.getItem(c) + " ");
      }
      Console.WriteLine();
      Console.ReadKey();
    }
  }
}